<?php
// +----------------------------------------------------------------------
// | Author: wyd 2025/11/2
// | DESC: 
// +----------------------------------------------------------------------

declare (strict_types=1);

use function Swoole\Coroutine\run;

run(function () {
    $id = go(function () {
        return '默认返回的是协程id';
    });
    echo "协程的id是：" . $id . PHP_EOL;
});

//输出结果是2


/**获取返回值***********************************************************************************************************/
/**1通过Coroutine\channel获取*/
//会自动获取异步执行后的结果
run(function () {
    $channel = new \Swoole\Coroutine\Channel(1);
    $id = go(function () use ($channel) {
        co::sleep(1);
        $result = '内部需要返回的值，通过Coroutine\channel得到';
        $channel->push($result);
    });
    echo "协程的id是：" . $id . PHP_EOL;
    $res = $channel->pop();         //会自动监听得到结果
    var_dump($res);
});


/**2、通过应用变量获取得到*/
//不会自动得到异步执行后的结果，如下想得到正确的结果，必须要在异步执行完成之后。
run(function () {
    $res = '';
    $id = go(function () use (&$res) {
        co::sleep(1);
        $res = '内部需要返回的值,通过引用变量得到';
    });
    echo "协程的id是：" . $id . PHP_EOL;
    var_dump($res);         //输出空 ，因为内部异步阻塞了
    co::sleep(2);
    var_dump($res);         //输出  内部需要返回的值,通过引用变量得到
});


